package com.xhj.mybatis.scripting.xmltags;

/**
 * VarDeclSqlNode
 *
 * @author XJks
 * @description 用于在 MyBatis 的动态 SQL 解析过程中声明变量。它实现了 SqlNode 接口，可以在 SQL 构建时向上下文中绑定变量。
 */
public class VarDeclSqlNode implements SqlNode {

    /**
     * 变量名，用于在上下文中绑定
     */
    private final String name;

    /**
     * 变量表达式，用于计算变量的值
     */
    private final String expression;

    /**
     * 构造方法，初始化变量名和表达式
     *
     * @param var 变量名
     * @param exp 变量表达式
     */
    public VarDeclSqlNode(String var, String exp) {
        name = var;
        expression = exp;
    }

    /**
     * 在动态 SQL 构建上下文中应用变量声明
     *
     * @param context 动态 SQL 构建上下文
     * @return 总是返回 true，表示节点已处理
     */
    @Override
    public boolean apply(DynamicContext context) {
        // 使用 OgnlCache 解析表达式，获取变量值
        final Object value = OgnlCache.getValue(expression, context.getBindings());
        // 将变量名和变量值绑定到上下文中
        context.bind(name, value);
        // 返回 true，表示处理成功
        return true;
    }

}